package cn.hrc.controller;

import cn.hrc.dao.FileMapper;
import cn.hrc.entity.LargeFile;
import cn.hrc.entity.XJson;
import cn.hrc.service.impl.BookServiceImpl;
import cn.hrc.service.impl.HotServiceImpl;
import cn.hrc.service.impl.TypeServiceImpl;
import cn.hrc.utils.PackJson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.logging.Logger;

/**  */
@RestController
/**  */
@RequestMapping("/api/public")
public class PublicController {
    private Logger logger = Logger.getLogger(PublicController.class.getName());
    @Autowired /** 图片 */
    FileMapper fileMapper;
    @Autowired /** Redis */
    RedisTemplate redisTemplate;
    @Autowired /** 商品 */
    BookServiceImpl bookService;
    @Autowired /** 类别 */
    TypeServiceImpl typeService;
    @Autowired /** 轮播图 */
    HotServiceImpl hotService;
    @GetMapping("/showimg/{id}")
    public void dispaly(@PathVariable String id, HttpServletResponse response) {
        logger.info("显示图片 id: " + id);
        if (id == null) return;
        // 图片 对象
        LargeFile lg = null;
        // 从缓存中获取图片
        logger.info("Redis 查询图片");
        lg = (LargeFile)redisTemplate.opsForHash().get("hrc:file", id);
        // 如果缓存中没有数据 从数据库中获取
        if (lg == null) {
            logger.info("SQL 查询图片");
            lg = fileMapper.findOne(id);
        }
        // 如果数据库中没有 返回
        if (lg == null) return;
        redisTemplate.opsForHash().put("hrc:file", id, lg);
        // 获取图片字节数组
        byte[] buf = (byte[])lg.getContent();   //字节数组方式
        try {
            // 设置响应类型
            response.setContentType("image/jpeg");
            // 将字节数组输出到响应中
            response.getOutputStream().write(buf);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 首页显示所有首页数据
    @GetMapping("/home")
    public XJson home() {
        logger.info("首页显示所有首页数据");
        logger.info("Redis 查询所有首页数据");

        return PackJson.pack(200,"ok",null);
    }
}
